package share.storage.io;

import java.io.Serializable;

/**
 * 文件
 * 
 * @author wzz
 */
public interface File extends Serializable {

	/**
	 * 获取文件大小，以字节为单位
	 * 
	 * @return 文件字节数
	 */
	public long getSize();

	/**
	 * @return 是否为一个目录
	 */
	public boolean isDirectory();

	/**
	 * @return 是否是一个文件
	 */
	public boolean isFile();

	/**
	 * 获取目录下的文件列表
	 * @return 文件列表
	 */
	public File[] getChildren();
	


	/**
	 * 创建并返回一个FileReader
	 * 
	 * @return FileReader
	 */
	public FileReader getReader();

	/**
	 * 获取文件名
	 * 
	 * @return 文件名
	 */
	public String getFilename();

	/**
	 * 返回父目录
	 * 
	 * @return 父目录
	 */
	public File getParent();

	/**
	 * 设置父目录，对于每个挂载点，其父目录将会被设置成RootFile
	 * 
	 * @param parent
	 */
	public void setParent(File parent);

	/**
	 * 设置文件名，应尽可能的将其持久化
	 * 
	 * @param name
	 */
	public void setFileName(String name);

	/**
	 * 在子文件中查找指定文件名的文件
	 * 
	 * @param name
	 * @return 文件or Null
	 */
	public File findChildByName(String name);

	/**
	 * 是否是隐藏文件
	 */
	public boolean isHidden();

	/**
	 * 获取文件描述
	 */
	public String getDescribe();

	/**
	 * 设置文件描述，并尽可能将其持久化起来
	 */
	public void setDescribe(String describe);

	/**
	 * 获取最后更改时间,自1970-1-1 0：0：0的毫秒数
	 * 
	 * @see java.util.Date#getTime()
	 */
	public long lastModified();

	/**
	 * 获取文件类型
	 */
	public FileType getFileType();

	/**
	 * 设置文件类型
	 */
	public void setFileType(FileType type);
}
